<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>自定义指令</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <!-- 
        自定义指令：
        directives
     -->
    <div id="app">
        <!-- 需求1：定文一个v-big指令。和v-text功能类似，但会把定的数值放大10倍。 -->
        <h2>当前n值是：<span v-text="n"></span></h2>
        <h2>放大10倍后n是：<span v-big-number="n"></span></h2>
        <button @click="n++">点击+1</button>
        <!-- 需求2：定义一个v-fbind指令，和v-bind功能类似，但可以让其所定的input元素默认获取焦点。 -->
        <input type="text" v-fbind:value="n">
    </div>
    <script>
        Vue.config.productionTip = false
        const vm = new Vue({
            data() {
                return {
                    n: 1
                }
            },
            directives: {
                //该作用域的this是window,不是vm!!!!!!!
                //内部的指令都是局部指令
                /**
                 *big函数何时会被调用？
                    1、指令与元素成功绑定时（一上来）。
                    2、指令所在的模板重新解析时
                */
                'big-number'(element, binding) {
                    console.log(this, element, binding.value)
                    element.innerText = binding.value * 10
                },
                fbind: {
                    //指令与元素成功绑定时(一上来)
                    bind(element, binding) {
                        console.log("bind")
                        element.value = binding.value
                    },
                    //指令所在的而元素被插入到页面时
                    inserted(element, binding) {
                        console.log("inserted")
                        element.focus()
                    },
                    //指令所在的模板被重新解析时
                    update(element, binding) {
                        console.log("update")
                        element.value = binding.value
                        element.focus()
                    }
                }
                // fbind(element, binding) { //简写。只执行了bind和update
                //     console.log(element, binding.value)
                //     element.value = binding.value
                //     element.focus()//不生效
                // }
            }

        })

        vm.$mount('#app')
    </script>
</body>

</html>